package ie.flax.flaxengine.client.gameobjects;
import ie.flax.flaxengine.client.FEntity;
import ie.flax.flaxengine.client.FLog;
import ie.flax.flaxengine.client.FVector;
import ie.flax.flaxengine.client.FlaxEngine;
import ie.flax.flaxengine.client.Graphic.FCamera;
import ie.flax.flaxengine.client.Graphic.FCamera.Directoin;
import ie.flax.flaxengine.client.Graphic.Sprite;
import ie.flax.flaxengine.client.Graphic.Sprite.AnimationState;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.dom.client.TouchStartEvent;
import com.google.gwt.event.dom.client.TouchStartHandler;
import com.google.gwt.user.client.ui.RootPanel;
/**
* This is a basic entity player, wich has W D A S controls for moving in a direction
*
*/
public class Player extends FEntity {
/**
* Constructs all the data for you atm, just for testing. So it easy to create an entity
*/
public Player(FVector pos)
{
super((float)pos.x, (float)pos.y, 32, 64, new Sprite("http://flax.ie/test/s.png", 32,64), "audio");
speed = 4;
bind();
FLog.trace(this + " was created ");
}
/**
* Default construct for serailizer
*/
@Deprecated
public Player(){
bind();
speed = 4;
}
/**
* Binds the key and touch events to the player entity.
*/
private void bind()
{
RootPanel containerPanel = RootPanel.get();
attachCamera(FlaxEngine.camera); //FIXME Ciaran remove after 0.2 when doing the entity system proper
containerPanel.addDomHandler( new TouchStartHandler() {
@Override
public void onTouchStart(TouchStartEvent event) {
y += speed;
sprite.nextFrame();
if(cam != null){
cam.incrementY(speed);
}
}
}, TouchStartEvent.getType());
containerPanel.addHandler( new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event) {
keyControls(event);
}
}, KeyPressEvent.getType());
}
/**
* This sets up the logic behind the keyControls for the player. I.E the
* player moving and animating on move. Also the camera panning with the
* player
*
* TODO - create different camera style options, such as camera centered on player or new area when player walks to the border
*
* @param event
*/
private void keyControls(KeyPressEvent event) {
int cameraSpeed = this.speed;
if (event.getCharCode() == 'w' || event.getCharCode() == 'W') {
y -= speed;
sprite.setAnimationState(AnimationState.UP);
sprite.nextFrame();
cam.panCentered(this, Directoin.NORTH);
} else if (event.getCharCode() == 'd' || event.getCharCode() == 'D') {
x += speed;
sprite.setAnimationState(AnimationState.RIGHT);
sprite.nextFrame();
cam.panCentered(this, Directoin.EAST);
} else if (event.getCharCode() == 'a' || event.getCharCode() == 'A') {
x -= speed;
sprite.setAnimationState(AnimationState.LEFT);
sprite.nextFrame();
cam.panCentered(this, Directoin.WEST);
} else if (event.getCharCode() == 's' || event.getCharCode() == 'S') {
y += speed;
sprite.setAnimationState(AnimationState.DOWN);
sprite.nextFrame();
cam.panCentered(this, Directoin.SOUTH);
}
}
@Override
public void update(double deltaTime) {
sprite.update(deltaTime);
}
}